home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 9 / The PC-SIG Library on CD ROM - Ninth Edition.iso / 501_600 / DISK0579 / DISK0579.ZIP / CHAP13.TXT < prev    next >
Text File  |  1989-12-01  |  14KB  |  353 lines

  1.  
  2.  
  3.  
  4.                                                    Chapter 13
  5.                             UNITS IN TURBO PASCAL 4.0 AND 5.X
  6.  
  7.  
  8. THIS IS NEW
  9. ____________________________________________________________
  10.  
  11. If you are using TURBO Pascal version 3.0 or earlier, you will
  12. find that none of the programs in this chapter can be compiled
  13. or run with your system, but it would be to your advantage to
  14. read this material anyway.
  15.  
  16. When Nicklaus Wirth originally defined Pascal, it was intended
  17. to be a very small language to be used primarily for teaching
  18. programming concepts to computer neophytes.  A program would
  19. be contained in a single file and compiled in its entirety
  20. each time it was compiled.  There was no provision for
  21. splitting a program up into smaller parts, compiling each part
  22. separately, and linking all of the parts together into a final
  23. completed package.
  24.  
  25. Since human beings make mistakes, and because the entire
  26. program must be recompiled each time any mistake is
  27. discovered, pure Pascal is unsuitable for very large programs. 
  28. Seeing this problem, many compiler writers have defined some
  29. method by which a large program could be broken down into
  30. smaller parts and separately compiled.  
  31.  
  32. This chapter will define and illustrate the way Borland
  33. International has chosen to do so.
  34.  
  35.  
  36.  
  37. PART OF A PROGRAM
  38. ____________________________________________________________
  39.  
  40. Load the program named AREAS.PAS and        =================
  41. display it on your monitor.  This is the        AREAS.PAS
  42. first example of a TURBO Pascal unit and    =================
  43. although it is similar to a program in
  44. many ways, it has a few differences which
  45. must be pointed out.  We will start by pointing out the major
  46. sections, then get into the details of each section.
  47.  
  48. You will first notice that this program begins with the
  49. reserved word unit instead of our usual program, followed by
  50. the unit name, Areas.  In line 10, the reserved word interface
  51. is used and all of the statements following it down to the
  52. next reserved word implementation, are part of the interface
  53. with any program outside of this unit.  The reserved word,
  54. implementation, defines the beginning of the definitions and
  55. executable parts of the private portion of the unit.
  56.  
  57.                                                     Page 13-1
  58.  
  59.                             Units in TURBO Pascal 4.0 and 5.X
  60.  
  61. Finally, in lines 48 through 50, we find what appears to be
  62. a program block just like we have been using all through this
  63. tutorial, but actually is not.  We will see in a few
  64. paragraphs that this is the initialization section and does
  65. a very specific job for us even though somewhat different than
  66. what we have become used to.
  67.  
  68.  
  69.  
  70. THE INTERFACE PART
  71. ____________________________________________________________
  72.  
  73. Following the unit name we have a section of code in lines 10
  74. through 15 that define the interface of this module to the
  75. outside world.  Anything defined here is available to the
  76. outside world and can be used by any other program provided
  77. it has a "uses Areas;" statement in it.  Constants, types, and
  78. variables could also be defined here, and if they were, they
  79. too would be available to any user program, but in this case,
  80. only the four functions are made available. It should be
  81. fairly obvious that the functions calculate the areas of four
  82. different geometric shapes.
  83.  
  84.  
  85. THE IMPLEMENTATION PART
  86. ____________________________________________________________
  87.  
  88. From line 16 through line 47 we have the implementation part
  89. as delineated by the reserved word implementation and the
  90. beginning of the initialization block.  The implementation
  91. part is the actual workhorse of the unit since it contains all
  92. of the executable code for the four functions defined above. 
  93.  
  94.  
  95. Lines 26 through 31 contain the code needed to generate the
  96. area of a circle, and this code is no different than the code
  97. that would be used if this function were placed in the
  98. declaration part of any Pascal program.  There is a difference
  99. in the function header since the formal parameters are not
  100. repeated here.  TURBO Pascal allows you to either drop the
  101. formal parameters here or include them if you think the code
  102. would be more readable.  If you include them, they must be
  103. exactly as shown in the interface part or you will get a
  104. compile error.
  105.  
  106.  
  107.  
  108. A LOCAL PROCEDURE
  109. ____________________________________________________________
  110.  
  111. In lines 20 through 24, we have a procedure that is used
  112. within one of the four functions, namely the first.  It is
  113. really a stupid procedure since it really wastes time setting
  114. up linkage for the procedure call and does nothing that
  115.  
  116.                                                     Page 13-2
  117.  
  118.                             Units in TURBO Pascal 4.0 and 5.X
  119.  
  120. couldn't be done just as easy with a simple multiply, but it
  121. does illustrate that you can use another procedure within the
  122. unit body.  The procedure Mult_Two_Numbers cannot be used
  123. outside of this unit because it is not included in the
  124. interface part of the unit.  It is, in effect, invisible to
  125. the outside world.
  126.  
  127. The variable My_Pi would be more correctly represented as a
  128. constant but it is defined as a variable to illustrate use of
  129. the body of the unit later.  Since My_Pi is not defined in the
  130. interface part of the unit, it also is invisible to the
  131. outside world and in fact protected from accidental corruption
  132. by a misplaced statement in another program.  The procedure
  133. and the variable for all practical purposes have an
  134. impenetrable barrier around them protecting them from
  135. unauthorized use or modification by the outside world, but the
  136. functions internal to this unit have free access to them just
  137. as in any other program.
  138.  
  139.  
  140. WHAT IS THE BODY USED FOR?
  141. ____________________________________________________________
  142.  
  143. Lines 48 through 50 constitute the body of the unit and
  144. although they appear to consist of another executable program
  145. that can be called and used, they actually perform another
  146. very specific and useful purpose.  This is actually an
  147. initialization section and all of the statements in this part
  148. of the unit are executed once and only once, and they are
  149. executed when the main program is loaded.  This is done
  150. automatically for you by the system.  There is no way provided
  151. for you to call the statements in the body after the program
  152. has begun execution.  This is why the variable My_Pi was
  153. defined as a variable, so we could use this section to
  154. initialize it to a useful value.
  155.  
  156. The body can actually have function and procedure calls that
  157. are executed when the program is loaded, as well as loops or
  158. conditional statements.  
  159.  
  160. If you would like to execute some statements during
  161. initialization and again during the execution of the program
  162. one or more times, you can write a procedure or function to
  163. accomplish your desires and call it at the appropriate times
  164. in the main program.
  165.  
  166.  
  167. SELECTIVE NAMING OF FUNCTIONS AND PROCEDURES
  168. ____________________________________________________________
  169.  
  170. If you will study the interface part of this unit you will
  171. find that everything you need to use this unit is contained
  172. within it, provided that you know enough about plane geometry
  173. to understand the functions.  You should strive for this
  174.  
  175.                                                     Page 13-3
  176.  
  177.                             Units in TURBO Pascal 4.0 and 5.X
  178.  
  179. understanding in all of your interfaces so that the
  180. implementation doesn't even require consultation.  Keep in
  181. mind, that if you need to, you can include comments to further
  182. define the functions in the interface part of the unit.
  183.  
  184. At this time, you should compile this unit.  You will have to
  185. compile it to disk rather than only to memory so it will be
  186. available for use later in this chapter.  You do this by using
  187. the menus to change the Compile/Destination to the Disk
  188. option.  Note that it will not generate an .EXE file but
  189. instead a .TPU file.  This is Borland's filename extension for
  190. a unit.
  191.  
  192.  
  193. ANOTHER UNIT
  194. ____________________________________________________________
  195.  
  196. Load the file named PERIMS.PAS for another   ================
  197. example of a unit.  This is similar to the      PERIMS.PAS
  198. last except that it does not contain an      ================
  199. internal procedure, and it is composed of
  200. three procedures that calculate the
  201. perimeters of geometric shapes, all of which are visible to
  202. the outside world because they are included in the interface
  203. part of the unit.  Once again, we have a private variable
  204. named My_Pi and a block of code (actually a single statement)
  205. to initialize the value of My_Pi when the unit is loaded.
  206.  
  207. Be sure you compile this unit to disk in the same manner as
  208. the last and they will be ready for use.
  209.  
  210. Now that we have several functions and procedures that can be
  211. used to calculate the areas or perimeters of several different
  212. shapes, we need a program to illustrate their use, so if you
  213. load and display the program named GARDEN.PAS you will have
  214. an example of their use.
  215.  
  216.  
  217. HOW DO WE USE OUR DEFINED UNITS?
  218. ____________________________________________________________
  219.  
  220. GARDEN.PAS is a very simple program that     ================
  221. uses one of the functions and one of the        GARDEN.PAS
  222. procedures.  The only thing you must do is   ================
  223. add the names of the units prior to using
  224. the external functions or procedures. 
  225. Lines 16 and 17 each use one of our newly defined routines. 
  226. As you can see, there is nothing magic about the new routines,
  227. and once you include the unit names in a uses statement, the
  228. new routines are in a sense, an extension to the Pascal
  229. language.  Compile and run this program and see that it really
  230. does what you expect it to do.
  231.  
  232.  
  233.  
  234.                                                     Page 13-4
  235.  
  236.                             Units in TURBO Pascal 4.0 and 5.X
  237.  
  238. ONE MORE EXAMPLE OF UNIT USE
  239. ____________________________________________________________
  240.  
  241. Load and display the program named          =================
  242. SHAPES4.PAS for another example of using a     SHAPES4.PAS
  243. predefined unit.  In line 3, this program   =================
  244. includes our new unit named Areas so all
  245. four of the area functions are available,
  246. and in fact, all four are used within the body of the program. 
  247. This program should not be difficult for you to understand and
  248. you will be left to study it on your own.  You should observe
  249. that this program is repeated in chapter 14 in a different
  250. form for users of TURBO Pascal 3.0.
  251.  
  252.  
  253. MULTIPLE USES OF AN IDENTIFIER
  254. ____________________________________________________________
  255.  
  256. Suppose we wanted to move the variable named My_Pi to the
  257. interface section in both of the units we defined earlier. 
  258. Then in the program named GARDEN.PAS when we included both of
  259. the units in the uses statement, both variables named My_Pi
  260. would be available for use so we would have a bit of a problem
  261. defining which one we really meant to use.  TURBO Pascal has
  262. a way to tell the system which one you wish to use by using
  263. a qualifier in much the same way that you use a field of a
  264. record.  The variable name Areas.My_Pi would refer to that
  265. variable from the unit named Areas, and the name Perims.My_Pi
  266. would refer to the variable from the unit named Perims.
  267.  
  268. You could even define a new variable of the same name in your
  269. main program and refer to it by the qualified name
  270. Garden.My_Pi if you chose to.  This is not recommended as it
  271. would get very confusing to you.  The compiler would be very
  272. happy to compile and run such a program, because it would not
  273. get confused.
  274.  
  275. It is not illustrated in the example program, but this
  276. technique applies to procedure and function names as well. 
  277. If you used the same procedure name in two different units,
  278. you could specify which procedure you intend to use by using
  279. the dot notation with the unit name and the procedure name. 
  280. Unit_Name.Procedure_Name would therefore refer to the
  281. procedure named Procedure_Name that is a part of the unit
  282. named Unit_Name.
  283.  
  284.  
  285. WHY USE UNITS?
  286. ____________________________________________________________
  287.  
  288. There are basically three reasons to use units in your
  289. programming.  First, some programs are so large that they
  290. should be broken up into smaller chunks for ease of handling
  291. and reasonable compilation size.  In fact some are so large
  292.  
  293.                                                     Page 13-5
  294.  
  295.                             Units in TURBO Pascal 4.0 and 5.X
  296.  
  297. that they cannot be compiled all at one time since TURBO
  298. Pascal has an upper limit of 64K of code which can be compiled
  299. at once.  Most other compilers have a similar limit also.
  300.  
  301. Secondly, once you complete the code to perform a certain job,
  302. you may wish to use the same code in another program to do the
  303. same job.  If you put the code in a unit, it is ready to
  304. simply call and use again.  This is becoming a rather
  305. important topic in software engineering usually referred to
  306. as "Reusable Software".
  307.  
  308.  
  309. THIS IS INFORMATION HIDING
  310. ____________________________________________________________
  311.  
  312. Finally, it is sometimes important to hide a portion of code
  313. from the rest of the program to assure that it cannot be
  314. unduly modified by an error somewhere else in the program. 
  315. This too is becoming an important area of software engineering
  316. and is usually referred to as information hiding.
  317.  
  318.  
  319. PROGRAMMING EXERCISE
  320. ____________________________________________________________
  321.  
  322. 1.   Move My_Pi to the interface in both units and change one
  323.      of the values slightly to see if you can read in the
  324.      right one at the right time.  Define another variable of
  325.      the same name in your main program and see if you can
  326.      differentiate between all three values.  Note that, due
  327.      to the nature of this exercise, no answer is given for
  328.      it on the distribution disk.
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.                                                     Page 13-6
  353.